using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Configuration;

using Tao.OpenGl;

namespace tp2
{
    public class Escena
    {
        private static int columnas = int.Parse(ConfigurationManager.AppSettings["Columnas"]);

        public static void Dibujar(List<PuntoDeControl> puntosDeControlVistaSuperior,
            List<PuntoDeControl> puntosDeControlAlturas)
        {
            List<Punto> puntosCurva3D = Curva.Curva3D(puntosDeControlVistaSuperior, puntosDeControlAlturas);

            if (puntosCurva3D.Count == 0)
                return;

            Gl.glDisable(Gl.GL_LIGHTING);
            ColorTP.GlColor(Color.Goldenrod);

            Cilindro.Dibujar(new Punto(puntosCurva3D[puntosCurva3D.Count - 1].X,
                puntosCurva3D[puntosCurva3D.Count - 1].Y,
                puntosCurva3D[puntosCurva3D.Count - 1].Z),
                new Punto(puntosCurva3D[0].X, puntosCurva3D[0].Y, puntosCurva3D[0].Z));

            for (int i = 1; i < puntosCurva3D.Count; i++)
            {
                Cilindro.Dibujar(new Punto(puntosCurva3D[i - 1].X,
                puntosCurva3D[i - 1].Y,
                puntosCurva3D[i - 1].Z),
                new Punto(puntosCurva3D[i].X, puntosCurva3D[i].Y, puntosCurva3D[i].Z));
            }



            ColorTP.GlColor(Color.LightSlateGray);
            int distancia = (int)Math.Floor((float)Curva.TramosCurva3D / (columnas+1));

            for (int i = 0; i < (int)Math.Floor((float)puntosCurva3D.Count / (Curva.TramosCurva3D + 1)); i++)
            {
                for (int j = 1; j < columnas+1; j++)
                {
                    int indice = i * (Curva.TramosCurva3D + 1) + j * distancia;
                    Soporte.Dibujar(puntosCurva3D[indice], puntosCurva3D[indice-1]);
                }
            }

            Gl.glEnable(Gl.GL_LIGHTING);
        }
    }
}
